Revert "libxl: add helper function to set device_model_version"
authorWei Liu <wei.liu2@citrix.com>
Wed, 22 May 2019 08:09:08 +0000 (09:09 +0100)
committerWei Liu <wei.liu2@citrix.com>
Wed, 22 May 2019 08:09:08 +0000 (09:09 +0100)
This reverts commit 3802ecbaa9eb36cbadce39ab03a4f6d36f29ae5c.

Signed-off-by: Wei Liu <wei.liu2@citrix.com>
tools/libxl/libxl_create.c
tools/libxl/libxl_dm.c
tools/libxl/libxl_internal.h

index 42a218cf3aad58dacace0e30dc6ac0c6098ba407..03ce166f4fbe28936ea8163b22c142c7332a8a14 100644 (file)
 
 #include <xen-xsm/flask/flask.h>
 
-int libxl__domain_set_device_model(libxl__gc *gc, libxl_domain_config *d_config)
-{
-    libxl_domain_build_info *b_info = &d_config->b_info;
-    int ret;
-
-    libxl_defbool_setdefault(&b_info->device_model_stubdomain, false);
-
-    if (b_info->device_model_version)
-        return 0;
-
-    switch (b_info->type) {
-    case LIBXL_DOMAIN_TYPE_HVM:
-        if (libxl_defbool_val(b_info->device_model_stubdomain)) {
-            b_info->device_model_version =
-                LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL;
-        } else {
-            b_info->device_model_version = libxl__default_device_model(gc);
-        }
-        break;
-    default:
-        b_info->device_model_version =
-            LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL;
-        break;
-    }
-
-    if (b_info->device_model_version == LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN) {
-        const char *dm;
-
-        dm = libxl__domain_device_model(gc, b_info);
-        ret = access(dm, X_OK);
-        if (ret < 0) {
-            /* qemu-xen unavailable, use qemu-xen-traditional */
-            if (errno == ENOENT) {
-                LOGE(INFO, "qemu-xen is unavailable"
-                     ", using qemu-xen-traditional instead");
-                b_info->device_model_version =
-                    LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL;
-            } else {
-                LOGE(ERROR, "qemu-xen access error");
-                return ERROR_FAIL;
-            }
-        }
-    }
-
-    return 0;
-}
-
 int libxl__domain_create_info_setdefault(libxl__gc *gc,
                                          libxl_domain_create_info *c_info)
 {
@@ -120,8 +73,6 @@ int libxl__domain_build_info_setdefault(libxl__gc *gc,
         return ERROR_INVAL;
     }
 
-    assert(b_info->device_model_version);
-
     /* Copy deprecated options to it's new position. */
     rc = libxl__domain_build_info_copy_deprecated(CTX, b_info);
     if (rc) {
@@ -129,10 +80,45 @@ int libxl__domain_build_info_setdefault(libxl__gc *gc,
         return rc;
     }
 
+    libxl_defbool_setdefault(&b_info->device_model_stubdomain, false);
+
     if (libxl_defbool_val(b_info->device_model_stubdomain) &&
         !b_info->device_model_ssidref)
         b_info->device_model_ssidref = SECINITSID_DOMDM;
 
+    if (!b_info->device_model_version) {
+        if (b_info->type == LIBXL_DOMAIN_TYPE_HVM) {
+            if (libxl_defbool_val(b_info->device_model_stubdomain)) {
+                b_info->device_model_version =
+                    LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL;
+            } else {
+                b_info->device_model_version = libxl__default_device_model(gc);
+            }
+        } else {
+            b_info->device_model_version =
+                LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN;
+        }
+        if (b_info->device_model_version
+                == LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN) {
+            const char *dm;
+
+            dm = libxl__domain_device_model(gc, b_info);
+            rc = access(dm, X_OK);
+            if (rc < 0) {
+                /* qemu-xen unavailable, use qemu-xen-traditional */
+                if (errno == ENOENT) {
+                    LOGE(INFO, "qemu-xen is unavailable"
+                         ", using qemu-xen-traditional instead");
+                    b_info->device_model_version =
+                        LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL;
+                } else {
+                    LOGE(ERROR, "qemu-xen access error");
+                    return ERROR_FAIL;
+                }
+            }
+        }
+    }
+
     if (b_info->blkdev_start == NULL)
         b_info->blkdev_start = libxl__strdup(NOGC, "xvda");
 
@@ -953,12 +939,6 @@ static void initiate_domain_create(libxl__egc *egc,
         goto error_out;
     }
 
-    ret = libxl__domain_set_device_model(gc, d_config);
-    if (ret) {
-        LOGD(ERROR, domid, "Unable to set domain device model");
-        goto error_out;
-    }
-
     ret = libxl__domain_create_info_setdefault(gc, &d_config->c_info);
     if (ret) {
         LOGD(ERROR, domid, "Unable to set domain create info defaults");
index 209deedce6e74ee7ddc5f8ca12a75aa0c1f1670e..f4fc96415da37bd3a909bcac78bf6a26e0aca220 100644 (file)
@@ -2157,8 +2157,6 @@ void libxl__spawn_stub_dm(libxl__egc *egc, libxl__stub_dm_spawn_state *sdss)
     dm_config->c_info.run_hotplug_scripts =
         guest_config->c_info.run_hotplug_scripts;
 
-    ret = libxl__domain_set_device_model(gc, dm_config);
-    if (ret) goto out;
     ret = libxl__domain_create_info_setdefault(gc, &dm_config->c_info);
     if (ret) goto out;
     ret = libxl__domain_build_info_setdefault(gc, &dm_config->b_info);
index 698cf70356e15cd98d69b2e163fe1de6de154ce0..3be5c644c1b66a15e7a9e8855a64c964b77d1400 100644 (file)
@@ -1374,8 +1374,6 @@ _hidden int libxl__device_nextid(libxl__gc *gc, uint32_t domid,
 _hidden int libxl__resolve_domid(libxl__gc *gc, const char *name,
                                  uint32_t *domid);
 
-_hidden int libxl__domain_set_device_model(libxl__gc *gc,
-                                           libxl_domain_config *d_config);
 /*
  * For each aggregate type which can be used as an input we provide:
  *